﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using QuanLyDeTaiKHCN.Obj_class;
namespace QuanLyDeTaiKHCN.UserControls
{
    public partial class BackgroundPage : System.Web.UI.UserControl
    {
        _dbDataContext _db = new _dbDataContext();
        public SecurityLib.Sec_AES _ps = new SecurityLib.Sec_AES();
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                BindGrid();
                pndetail.Visible = false;
            }
        }
        protected bool KiemTraTeHan(string madetai)
        {
            
            int counttemp = _db.tblTheoDoiHopDongs.Where(r => r.MaDeTai.Trim() == madetai).Count();
            if (counttemp != 0)
            {
                var item = _db.tblTheoDoiHopDongs.Single(r => r.MaDeTai.Trim() == madetai);
                List<string> listdenngay = new List<string>();
                List<int> listgiaidoan = new List<int>();
                int i = 0;
                foreach (var st in item.GiaiDoanThucHien.Split('@'))
                {
                    if (st.Length != 0)
                    {
                        i++;
                        listgiaidoan.Add(i);
                        listdenngay.Add(st);
                    }
                }
                int vitri = 0;
                MemberShip_ASP.listgiaidoanthuchien = listgiaidoan;
                MemberShip_ASP.listThoiGianThucHienDen = listdenngay;
                foreach (int itemgd in listgiaidoan)
                {
                    var count = _db.tblKiemTraTienDos.Where(r => r.MaDeTai.Trim() == madetai && r.GiaiDoan == itemgd);
                    if (count.Count() == 0)
                    {
                        int so1 = _db.Tinhsongay(CatalogAccess.ConvertToDate(listdenngay[vitri].Split('!')[1]));
                        int so2 = _db.Tinhsongay(DateTime.Now);
                        if (so1 < so2)
                            return true;
                    }
                    vitri++;
                }
                return false;
            }
            else
            {
                return false;
            }
        }


        protected bool KiemTraTeHanDeTai(string madetai)
        {
            var item = _db.tblTheoDoiHopDongs.Where(r => r.MaDeTai.Trim() == madetai);
            if (item.Count() == 0)
            {
                return false;
            }
            else
            {
                if (CatalogAccess.ConvertToDateBool(string.Format("{0:dd/MM/yyyy}",item.First().ThucHienDen)))
                {
                    var itemgiahan = _db.tblGiaHanDeTais.Where(r => r.MaDeTai.Trim() == madetai).OrderByDescending(r=>r.Lan);
                    if (itemgiahan.Count() == 0)//khong gia han
                    {
                        string ngayketthuc = string.Format("{0:dd/MM/yyyy}",item.First().ThucHienDen);
                        int sonkt = _db.Tinhsongay(CatalogAccess.ConvertToDate(ngayketthuc));
                        int sonht = _db.Tinhsongay(DateTime.Now);
                        if (sonkt < sonht)
                        {
                            return true;
                        }
                        else
                        {
                            return false;
                        }
                    }
                    else//co gia han
                    {
                        string ngayketthuc = string.Format("{0:dd/MM/yyyy}", itemgiahan.First().GiaHanToiNgay);
                        int sonkt = _db.Tinhsongay(CatalogAccess.ConvertToDate(ngayketthuc));
                        int sonht = _db.Tinhsongay(DateTime.Now);
                        if (sonkt < sonht)
                        {
                            return true;
                        }
                        else
                        {
                            return false;
                        }
                    }
                }
                else
                {
                    return false;
                }
            }
        }

        protected void BindGrid()
        {
            _dbDataContext _db = new _dbDataContext();
            if (this.Page.User.Identity.Name.Trim() == "admin")
            {
                var list = from p in _db.tblDanhSachDeTaiDuAns
                           select new
                           {
                               MaDeTaiDuAn = p.MaDeTaiDuAn.Trim(),
                               TenDeTaiDuAn = p.TenDeTaiDuAn.Trim(),
                               NguoiThuLy = p.tblAcount.TenHienThi.Trim(),
                               Ngay = string.Format("{0:dd/MM/yyyy}", p.NgayKhoiTaoDeTai)
                           };
                List<MemberShip_ASP.Temp> listtemp = new List<MemberShip_ASP.Temp>();
                MemberShip_ASP.Temp t;
                foreach (var itemds in list)
                {
                    t = new MemberShip_ASP.Temp();
                    t.MaDeTaiDuAn = itemds.MaDeTaiDuAn;
                    t.TenDeTaiDuAn = itemds.TenDeTaiDuAn;
                    t.NguoiThuLy = itemds.NguoiThuLy;
                    t.Ngay = itemds.Ngay;
                    t.Tre=KiemTraTeHan(itemds.MaDeTaiDuAn);
                    t.TreDeTai = KiemTraTeHanDeTai(itemds.MaDeTaiDuAn);
                    listtemp.Add(t);
                }
                MemberShip_ASP.dsdetai = listtemp;
                grid.DataSource = listtemp.ToList().OrderByDescending(r => r.Ngay);
                grid.DataBind();
            }
            else
            {
                var list = from p in _db.tblDanhSachDeTaiDuAns
                           where p.NguoiQuanLy == CatalogAccess.GetUserID(this.Page.User.Identity.Name)
                           select new
                           {
                               MaDeTaiDuAn = p.MaDeTaiDuAn.Trim(),
                               TenDeTaiDuAn = p.TenDeTaiDuAn.Trim(),
                               NguoiThuLy = (p.LoaiHoSo == 1 ? "Trực tiếp" : "Tuyển chọn"),
                               Ngay = string.Format("{0:dd/MM/yyyy}", p.NgayKhoiTaoDeTai),
                               Tre=false,
                               TreDeTai=false
                           };
                grid.DataSource = list.ToList().OrderByDescending(r => r.Ngay);
                grid.DataBind();
                grid.Columns[5].Visible = false;
                grid.Columns[6].Visible = false;
                grid.Columns[2].Visible = false;
            }
        }

        protected void grid_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "DeleteCommand")
            {
                lbltendetai.Text = "Tên đề tài: "+((Label)grid.Rows[int.Parse(e.CommandArgument.ToString())].FindControl("lblTenDeTaiDuAn")).Text;
                _dbDataContext _db = new _dbDataContext();
                pnlist.Visible = false;
                pndetail.Visible = true;
                int vitri = 0;
                string strHTML = "<table class=tableformat><tr style=text-align:center;font-weight:bold;><td>Giai đoạn</td><td>Thời gian thực hiện từ</td><td>Đến</td><td>Kinh phí</td><td>Thời gian trễ hạn</td></tr>";
                foreach (int itemgd in MemberShip_ASP.listgiaidoanthuchien)
                {
                    var count = _db.tblKiemTraTienDos.Where(r => r.MaDeTai.Trim() == grid.DataKeys[int.Parse(e.CommandArgument.ToString())].ToString() && r.GiaiDoan == itemgd);
                    if (count.Count() == 0)
                    {
                        int so1 = _db.Tinhsongay(CatalogAccess.ConvertToDate(MemberShip_ASP.listThoiGianThucHienDen[vitri].Split('!')[1]));
                        int so2 = _db.Tinhsongay(DateTime.Now);
                        string strhtml = "";
                        if (so1 < so2)
                        {
                            //tinh thoi gian tre han
                            int sum = so2 - so1;
                            if (sum < 30)
                            {
                                strhtml = "Giai đoạn này đã trễ tiến độ so với hợp đồng là: " + sum.ToString() + " ngày";
                            }
                            else if (sum < 365)
                            {
                                strhtml = "Giai đoạn này đã trễ tiến độ so với hợp đồng là: " + sum / 30 + " tháng " + sum % 30 + " ngày";
                            }
                            else
                            {
                                strhtml = "Giai đoạn này đã trễ tiến độ so với hợp đồng là: " + sum / 365 + " năm " + (sum % 365) / 30 + " tháng " + sum % 365 % 30 + " ngày";
                            }
                            ///////////////
                            try
                            {
                                strHTML += "<tr>";
                                strHTML += "<td style=text-align:center;>" + (vitri + 1).ToString() + "</td>";
                                strHTML += "<td style=text-align:center;>" + MemberShip_ASP.listThoiGianThucHienDen[vitri].Split('!')[0] + "</td>";
                                strHTML += "<td style=text-align:center;>" + MemberShip_ASP.listThoiGianThucHienDen[vitri].Split('!')[1] + "</td>";
                                strHTML += "<td style=text-align:center;>" + string.Format("{0:#,##}", int.Parse(MemberShip_ASP.listThoiGianThucHienDen[vitri].Split('!')[2])) + "</td>";
                                strHTML += "<td>" + strhtml + "</td>";
                                strHTML += "</tr>";
                            }
                            catch { }
                        }
                    }
                    vitri++;
                }
                strHTML += "</table>";
                lblDetail.Text = strHTML;
            }
            else if (e.CommandName == "DeleteCommandTreDeTai")
            {
                lbltendetai.Text = "Tên đề tài: " + ((Label)grid.Rows[int.Parse(e.CommandArgument.ToString())].FindControl("lblTenDeTaiDuAn")).Text;
                _dbDataContext _db = new _dbDataContext();
                pnlist.Visible = false;
                pndetail.Visible = true;
                int vitri = 0;
                string strHTML = "<table class=tableformat><tr style=text-align:center;font-weight:bold;><td>Thời gian thực hiện từ</td><td>Đến</td><td>Gia hạn tới ngày</td><td>Thời gian trễ hạn</td></tr>";
                var item = _db.tblTheoDoiHopDongs.Single(r => r.MaDeTai.Trim() == grid.DataKeys[int.Parse(e.CommandArgument.ToString())].Value.ToString());
                strHTML += "<tr>";
                strHTML += "<td style=text-align:center;>" + string.Format("{0:dd/MM/yyyy}", item.ThucHienTu) + "</td>";
                strHTML += "<td style=text-align:center;>" + string.Format("{0:dd/MM/yyyy}", item.ThucHienDen) + "</td>";

                string thuchienden = string.Format("{0:dd/MM/yyyy}", item.ThucHienDen);

                try
                {
                    var itemgiahan = _db.tblGiaHanDeTais.Where(r => r.MaDeTai.Trim() == grid.DataKeys[int.Parse(e.CommandArgument.ToString())].Value.ToString()).OrderByDescending(r=>r.Lan);
                    strHTML += "<td style=text-align:center;>" + string.Format("{0:dd/MM/yyyy}", itemgiahan.First().GiaHanToiNgay) + "</td>";
                    thuchienden = string.Format("{0:dd/MM/yyyy}", itemgiahan.First().GiaHanToiNgay);
                }
                catch { strHTML += "<td></td>"; }
                //tinh so ngay tre han
                int so1 = _db.Tinhsongay(CatalogAccess.ConvertToDate(thuchienden));
                int so2 = _db.Tinhsongay(DateTime.Now);
                string strhtml = "";
                if (so1 < so2)
                {
                    //tinh thoi gian tre han
                    int sum = so2 - so1;
                    if (sum < 30)
                    {
                        strhtml = "Giai đoạn này đã trễ tiến độ so với hợp đồng là: " + sum.ToString() + " ngày";
                    }
                    else if (sum < 365)
                    {
                        strhtml = "Giai đoạn này đã trễ tiến độ so với hợp đồng là: " + sum / 30 + " tháng " + sum % 30 + " ngày";
                    }
                    else
                    {
                        strhtml = "Giai đoạn này đã trễ tiến độ so với hợp đồng là: " + sum / 365 + " năm " + (sum % 365) / 30 + " tháng " + sum % 365 % 30 + " ngày";
                    }
                }
                strHTML += "<td>"+strhtml+"</td>";
                strHTML += "</table>";
                lblDetail.Text = strHTML;
            }
        }

        protected void LinkButton2_Click(object sender, EventArgs e)
        {
            pndetail.Visible = false;
            pnlist.Visible = true;
        }
    }
}